﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace C_高级编程
{
    public class AsyncClass
    {
        /**
            什么是异步编程？
                同步、异步主要是用来修饰方法的。
                ★、同步方法：  调用这需要等待该方法执行完毕并返回才能继续执行，成为“同步方法”
                ★、异步方法：  当一个方法被调用时立即返回，并获取一个线程执行该方法的内部业务，调用者不用等待该方法执行完毕，称为“异步方法”
                                （异步方法的好处在于非阻塞，（调用线程（主线程）不用暂停等待子线程完成），因此我们把不需要立即使用结果、较为耗时
                                    的任务设置为异步执行，可以提高主线程的运行效率。）
         */

        /**
              Task 类
                    Task类表示一个不返回值且通常异步执行的单个操作。
                    (对于要返回值的异步操作，要使用 Tasl<TResult>类)
                    由于对象执行Task任务的工作通常以异步的方式在线程池线程上执行，而不是在主应用程序线程上同步执行，
                    因此，可以使用Status属性，以及IsCanceled、IsCompleted 和IsFaulted 属性来确定任务的状态。
                    通常使用Lamda表达式来指定Task要执行的工作。

         * */

        /**
                进程、线程、任务  三者关系：
                   ①、 进程： 通常被定义为一个程序的执行。可以把进程看作是一个独立的程序，在内存中拥有独立的数据空间和代码空间。一个进程拥有的数据和变量只属于它自己。
                   ②、 线程 Thread： 线程则是某一进程中单独运行的一个执行流。也就是说线程存在与进程之中。 （一个进程由多个线程构成，线程之间共享进程的数据和代码）
                   ③、 任务Task :   任务的概念是抽象的，指由软件完成的一个活动。一个任务可以是一个进程，也可以是一个线程。简而言之，任务就是一系列共同为了完成一个目标的操作。
         **/
    }
}
